package calculadora;

import java.sql.*;
import java.util.Iterator;
import java.util.LinkedList;

/**
 *
 * @author dgarocker
 */
public class Condiciones {

  private LinkedList<Double> condiciones;
  private String ag_promotor;
  private Double rechazos;
  private int adicional1, adicional2;
  private Double[] meses;
  private Statement st;
  private String ida;
  private String idp;

  public Condiciones(Statement st) {
    this.condiciones = new LinkedList<Double>();
    this.ag_promotor = null;
    this.ida = null;
    this.idp = null;
    this.rechazos = null;
    this.adicional1 = 0;
    this.adicional2 = 0;
    this.meses = new Double[12];
    this.st = st;
  }

  /*
   * Toma las condiciones del promotor de la tabla de condiciones.
   */
  public boolean getCondicionesPromotor(int id_promotor, int mes) throws SQLException {
    String query = "SELECT tipo, plim_inf_autos1 , "
            + "plim_sup_autos1 , pvalor_autos1 , plim_inf_autos2 , plim_sup_autos2 , pvalor_autos2 , plim_inf_autos3 , "
            + "plim_sup_autos3 , pvalor_autos3, plim_inf_autos4 , plim_sup_autos4 , pvalor_autos4, plim_inf_autos5 , "
            + "plim_sup_autos5 , pvalor_autos5, plim_inf_autos6 , plim_sup_autos6 , pvalor_autos6 , "
            + "plim_inf_danos1 , plim_sup_danos1 , pvalor_danos1 , plim_inf_danos2 , "
            + "plim_sup_danos2 , pvalor_danos2 , plim_inf_danos3 , plim_sup_danos3 , pvalor_danos3 , plim_inf_danos4 ,"
            + "plim_sup_danos4 , pvalor_danos4, plim_inf_danos5 , plim_sup_danos5 , pvalor_danos5, plim_inf_danos6 , plim_sup_danos6 , pvalor_danos6,"
            + "plim_inf_personas1 , plim_sup_personas1 , pvalor_personas1 , plim_inf_personas2 , plim_sup_personas2 , pvalor_personas2 , "
            + "plim_inf_personas3, plim_sup_personas3, pvalor_personas3 , plim_inf_personas4 , plim_sup_personas4 , pvalor_personas4, plim_inf_personas5 , plim_sup_personas5 , "
            + "pvalor_personas5, plim_inf_personas6 , plim_sup_personas6 , pvalor_personas6, "
            + "rechazos,"
            + "adicional1,adicional2 , enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre,"
            + "id_agente "
            + "FROM condiciones WHERE id_promotor=" + id_promotor;
    ResultSet res = st.executeQuery(query);
    if (res.next()) {
      ResultSetMetaData metaData = res.getMetaData();
      int columnCount = metaData.getColumnCount() - 15;
      for (int i = 1; i < columnCount; i++) {
        this.condiciones.add(res.getDouble(i + 1));
      }
      this.ag_promotor = res.getString(1);
      this.rechazos = res.getDouble("rechazos");
      this.adicional1 = res.getInt("adicional1");
      this.adicional2 = res.getInt("adicional2");
      this.meses[0] = res.getDouble("enero");
      this.meses[1] = res.getDouble("febrero");
      this.meses[2] = res.getDouble("marzo");
      this.meses[3] = res.getDouble("abril");
      this.meses[4] = res.getDouble("mayo");
      this.meses[5] = res.getDouble("junio");
      this.meses[6] = res.getDouble("julio");
      this.meses[7] = res.getDouble("agosto");
      this.meses[8] = res.getDouble("septiembre");
      this.meses[9] = res.getDouble("octubre");
      this.meses[10] = res.getDouble("noviembre");
      this.meses[11] = res.getDouble("diciembre");
      this.ida = res.getString("id_agente");
      //System.out.println("Tiene los datos "+id_promotor+" "+this.ag_promotor+" "+getMetaPeriodo(mes));
      return true;
    }
    return false;
  }

  /*
   * Toma las condiones del agente de la tabla de condiciones
   */
  public boolean getCondicionesAgente(int id_agente, int mes) throws SQLException {
    String query = "SELECT tipo, plim_inf_autos1 , "
            + "plim_sup_autos1 , pvalor_autos1 , plim_inf_autos2 , plim_sup_autos2 , pvalor_autos2 , plim_inf_autos3 , "
            + "plim_sup_autos3 , pvalor_autos3, plim_inf_autos4 , plim_sup_autos4 , pvalor_autos4, plim_inf_autos5 , "
            + "plim_sup_autos5 , pvalor_autos5, plim_inf_autos6 , plim_sup_autos6 , pvalor_autos6 , "
            + "plim_inf_danos1 , plim_sup_danos1 , pvalor_danos1 , plim_inf_danos2 , "
            + "plim_sup_danos2 , pvalor_danos2 , plim_inf_danos3 , plim_sup_danos3 , pvalor_danos3 , plim_inf_danos4 ,"
            + "plim_sup_danos4 , pvalor_danos4, plim_inf_danos5 , plim_sup_danos5 , pvalor_danos5, plim_inf_danos6 , plim_sup_danos6 , pvalor_danos6,"
            + "plim_inf_personas1 , plim_sup_personas1 , pvalor_personas1 , plim_inf_personas2 , plim_sup_personas2 , pvalor_personas2 , "
            + "plim_inf_personas3, plim_sup_personas3, pvalor_personas3 , plim_inf_personas4 , plim_sup_personas4 , pvalor_personas4, plim_inf_personas5 , plim_sup_personas5 , "
            + "pvalor_personas5, plim_inf_personas6 , plim_sup_personas6 , pvalor_personas6, "
            + "rechazos,"
            + "adicional1,adicional2 , enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre,"
            + "id_promotor "
            + "FROM condiciones WHERE id_agente=" + id_agente;
    ResultSet res = st.executeQuery(query);
    if (res.next()) {
      ResultSetMetaData metaData = res.getMetaData();
      int columnCount = metaData.getColumnCount() - 15;
      //System.out.println("Numero de columnas de % :"+columnCount);
      for (int i = 1; i < columnCount; i++) {
        this.condiciones.add(i - 1, res.getDouble(i + 1));
      }

      Iterator<Double> it = this.condiciones.iterator();
      String salida = "los rangos de" + id_agente + " son :";
      int i = 0;
      while (it.hasNext()) {
        Double next = it.next();
        salida += " rango " + i + " = " + next;
      }
      this.ag_promotor = res.getString(1);
      this.rechazos = res.getDouble("rechazos");
      this.adicional1 = res.getInt("adicional1");
      this.adicional2 = res.getInt("adicional2");
      this.meses[0] = res.getDouble("enero");
      this.meses[1] = res.getDouble("febrero");
      this.meses[2] = res.getDouble("marzo");
      this.meses[3] = res.getDouble("abril");
      this.meses[4] = res.getDouble("mayo");
      this.meses[5] = res.getDouble("junio");
      this.meses[6] = res.getDouble("julio");
      this.meses[7] = res.getDouble("agosto");
      this.meses[8] = res.getDouble("septiembre");
      this.meses[9] = res.getDouble("octubre");
      this.meses[10] = res.getDouble("noviembre");
      this.meses[11] = res.getDouble("diciembre");
      this.idp = res.getString("id_promotor");
      return true;
    }
    return false;
  }

  public Double getMetaPeriodo(int mes) {
    Double meta = 0.0;
    for (int i = 0; i < mes; i++) {
      meta += this.meses[i];
    }
    return meta;
  }

  public int getAdicional1() {
    return adicional1;
  }

  public int getAdicional2() {
    return adicional2;
  }

  public String getAg_promotor() {
    return ag_promotor;
  }

  public LinkedList<Double> getCondiciones() {
    return condiciones;
  }

  public Double getRechazos() {
    return rechazos;
  }

  public String getIda() {
    return ida;
  }

  public String getIdp() {
    return idp;
  }

  public Double valorAutos(Double porcentaje) {
    porcentaje = Math.rint(porcentaje * 10000) / 10000;
    if (porcentaje <= this.condiciones.get(1)) {
      return this.condiciones.get(2).doubleValue();
    } else if (porcentaje >= this.condiciones.get(3) & porcentaje <= this.condiciones.get(4)) {
      return this.condiciones.get(5).doubleValue();
    } else if (porcentaje >= this.condiciones.get(6) & porcentaje <= this.condiciones.get(7)) {
      return this.condiciones.get(8).doubleValue();
    } else if (porcentaje >= this.condiciones.get(9) & porcentaje <= this.condiciones.get(10)) {
      return this.condiciones.get(11).doubleValue();
    } else if (porcentaje >= this.condiciones.get(12) & porcentaje <= this.condiciones.get(13)) {
      return this.condiciones.get(14).doubleValue();
    } else if (porcentaje >= this.condiciones.get(15) & porcentaje <= this.condiciones.get(16)) {
      return this.condiciones.get(17).doubleValue();
    } else {
      return 0.0;
    }
  }

  public Double valorDaños(Double porcentaje) {
    porcentaje = Math.rint(porcentaje * 10000) / 10000;
    if (porcentaje <= this.condiciones.get(19)) {
      return this.condiciones.get(20).doubleValue();
    } else if (porcentaje >= this.condiciones.get(21) & porcentaje <= this.condiciones.get(22)) {
      return this.condiciones.get(23).doubleValue();
    } else if (porcentaje >= this.condiciones.get(24) & porcentaje <= this.condiciones.get(25)) {
      return this.condiciones.get(26).doubleValue();
    } else if (porcentaje >= this.condiciones.get(27) & porcentaje <= this.condiciones.get(28)) {
      return this.condiciones.get(29).doubleValue();
    } else if (porcentaje >= this.condiciones.get(30) & porcentaje <= this.condiciones.get(31)) {
      return this.condiciones.get(32).doubleValue();
    } else if (porcentaje >= this.condiciones.get(33) & porcentaje <= this.condiciones.get(34)) {
      return this.condiciones.get(35).doubleValue();
    } else {
      return 0.0;
    }
  }

  public Double valorPersonas(Double porcentaje) {
    porcentaje = Math.rint(porcentaje * 10000) / 10000;
    if (porcentaje <= this.condiciones.get(37)) {
      return this.condiciones.get(38).doubleValue();
    } else if (porcentaje >= this.condiciones.get(39) & porcentaje <= this.condiciones.get(40)) {
      return this.condiciones.get(41).doubleValue();
    } else if (porcentaje >= this.condiciones.get(42) & porcentaje <= this.condiciones.get(43)) {
      return this.condiciones.get(44).doubleValue();
    } else if (porcentaje >= this.condiciones.get(45) & porcentaje <= this.condiciones.get(46)) {
      return this.condiciones.get(47).doubleValue();
    } else if (porcentaje >= this.condiciones.get(48) & porcentaje <= this.condiciones.get(49)) {
      return this.condiciones.get(50).doubleValue();
    } else if (porcentaje >= this.condiciones.get(51) & porcentaje <= this.condiciones.get(52)) {
      return this.condiciones.get(53).doubleValue();
    } else {
      return 0.0;
    }
  }
}
